package AD;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import entidades.Rol;

public class BDRol {
    static ArrayList<Rol> listadoRoles;
    static String[] camposRol = new String[] {"id_rol", "nom_rol"};
    
    public static ArrayList<Rol> recuperarRoles() throws Exception {
		String sql = "SELECT * FROM ROL;";
        Connection conn = null;
        PreparedStatement sentencia = null;
        ResultSet rs = null;
        listadoRoles = new ArrayList<Rol>();
        try {
            conn = ConexionBD.abreConnexio();
            sentencia = conn.prepareStatement(sql);
            rs = sentencia.executeQuery();
            almacenaRoles(listadoRoles, rs);
        } catch (SQLException ex) {
            throw new Exception("No se ha podido recoger los roles \n" + ex.getMessage() + "(" + ex.getErrorCode() + ")");
        } finally {
            ConexionBD.cierraRecursos(conn, rs);
        }
        return listadoRoles;
		
	}
    
    private static void almacenaRoles(ArrayList<Rol> listadoRoles, ResultSet rs) throws SQLException {
        while (rs.next()) {
            Rol rolDAO = new Rol();
            rolDAO.setId_rol(rs.getInt(camposRol[0]));
            rolDAO.setNom_rol(rs.getString(camposRol[1]));
            listadoRoles.add(rolDAO);
        }        
    }
    
    public ArrayList<Rol> getRoles(int indice) {
    	if (listadoRoles.size() > 0) {    		
    		if (indice != -1) {
    			ArrayList<Rol> nuevoRol=new ArrayList<Rol>();
    			nuevoRol.add(listadoRoles.get(indice));
    			return nuevoRol;
    		} else return listadoRoles;
    	}
    	return null;
    }
    
    public void insertarRol(Rol nuevoRol) throws Exception{
    	String sql = "INSERT INTO rol (nom_rol) values (?);";
        Connection conn = null;
        PreparedStatement sentencia = null;
        ResultSet rs = null;
        try {
            conn = ConexionBD.abreConnexio();
            sentencia = conn.prepareStatement(sql);
            sentencia.setString(1, nuevoRol.getNom_rol());
            sentencia.executeUpdate();
        } catch (SQLException ex) {
            throw new Exception("No se ha podido recoger los roles \n" + ex.getMessage() + "(" + ex.getErrorCode() + ")");
        } finally {
            ConexionBD.cierraRecursos(conn, rs);
        }
    }

}
